﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GrayParrot.Communications.Configuration;
using GrayParrot.Configuration;
using GrayParrot.Core;

namespace FimetContoDeposito.BLL
{
    public static class FCDHelpers
    {
        public static ReturnValue<bool> InviaMailNuovaRegistrazione(string username, string nome, string cognome, string note)
        {
            ReturnValue<bool> retValue = new ReturnValue<bool>(false);

            try
            {
                CommunicationsSettings m_commCfg = null;
                ConfigurationManagerHelper pp = new ConfigurationManagerHelper();
                m_commCfg = pp.GetCommunicationsSettings();

                GrayParrot.Communications.Configuration.EmailSettings m_es = m_commCfg.EmailSettings;

                List<string> m_to = m_es.ToAddresses();
                List<string> m_cc = m_es.CcAddresses();

                string oggetto = "Registrazione nuovo operatore cliente";
                string messaggio = string.Format("E' arrivata una nuova registrazione.<br/><br/><br/>Nome:{1}<br/><br/>Cognome:{2}<br/><br/>Username:{0}<br/><br/>Note:{3}", username, nome, cognome, note);

                bool esito = new GrayParrot.Communications.Email.Mailing()
                                 .Send(m_es.From,
                                       m_to,
                                       m_cc,
                                       oggetto,
                                       messaggio);

                if (esito)
                {
                    retValue.HasValue = true;
                    retValue.Value = true;
                }
            }
            catch (Exception ex)
            {
                retValue.HasError = true;
                retValue.Error = ex;
            }

            return retValue;
        }

        /// <summary>
        /// Invia una email all'operatore di un Magazzino per comunicargli la conferma della sua registrazione...
        /// </summary>
        /// <param name="username">The username.</param>
        /// <param name="nome">The nome.</param>
        /// <param name="cognome">The cognome.</param>
        /// <param name="emailTo">The email to.</param>
        /// <returns></returns>
        public static ReturnValue<bool> InviaMailConfermaNuovaRegistrazione(string username, string nome, string cognome, string emailTo)
        {
            ReturnValue<bool> retValue = new ReturnValue<bool>(false);

            try
            {
                CommunicationsSettings m_commCfg = null;
                ConfigurationManagerHelper pp = new ConfigurationManagerHelper();
                m_commCfg = pp.GetCommunicationsSettings();

                GrayParrot.Communications.Configuration.EmailSettings m_es = m_commCfg.EmailSettings;

                List<string> m_to = new List<string>();
                m_to.Add(emailTo);

                string oggetto = "Fimet Conto Deposito - Registrazione utente confermata";
                string messaggio = string.Format("Nome:{1}<br/>Cognome:{2}<br/>Username:{0}<br/>Registrazione Confermata.", username, nome, cognome);

                bool esito = new GrayParrot.Communications.Email.Mailing()
                                 .Send(m_es.From,
                                       m_to,
                                       null,
                                       oggetto,
                                       messaggio);

                if (esito)
                {
                    retValue.HasValue = true;
                    retValue.Value = true;
                }
            }
            catch (Exception ex)
            {
                retValue.HasError = true;
                retValue.Error = ex;
            }

            return retValue;
        }

        public static string GetEnumDescription(this Enum value)
        {
            System.Reflection.FieldInfo field = value.GetType().GetField(value.ToString());

            DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;

            return attribute == null ? value.ToString() : attribute.Description;
        }
    }
}
